import re
#2021-03-10 13:26
#关于正则表达式中 ( )\1 的意义。
s="wonderfulllllll l "
pttn=r'(l)'
pttn2=r'(l)\1'#规则：找出连续的l的个数后整除2显示出来，即lllll->lll
print('1 :',re.findall(pttn,s))
print('2 :',re.findall(pttn2,s))
print('5 :',re.sub(pttn2,r'\1',s))
print('6 :',re.sub(pttn2,r' ',s))#即从这行可以看出，那些连着的lll被替换成了空格

print("由此可以看出，在正则表达式中,'(内容)\1'的意义就是将\
      字符串中重复的那个东西以整除2的方式得出的个数\
      进行输出。\
      如上面的1、2原本的l个数为7，整除2后剩下3个l。\
      下面的3、4里的4个the整除2后显示2个the。\
      ")
      
st="cat in the the the the box."
pttn3=r'(\b[a-z]+\s)'#\s即空格。
pttn4=r'(\b[a-z]+\s)\1'#规则：找出边界为字母a-z的单词且该单词后面还有一个空格的东西后，整除2显示出来。
print('3 :',re.findall(pttn3,st))
print('4 :',re.findall(pttn4,st))
print('7 :',re.sub(pttn4,r'\1\1\1',st))#应该会出现6个the

st2="plane in the the the the sky sky sky sky."
pttn5=r'(\b[a-z]+)'
pttn6=r'(\b[a-z]+\s)\1'#删选对象的原型为the the the the sky sky ，即st2中的最后的sky sky.是没有被包含在内的，可以从下面的10中看出。
#pttn6的答案为the the sky
#pttn6中的\s要加上，不然可能会出问题。
print('8 :',re.findall(pttn5,st2))
print('9 :',re.findall(pttn6,st2))
print('10 :',re.sub(pttn6,r' ',st2))
